package com.example.form.controller;

import com.example.form.common.AppResult;
import com.example.form.common.ResultCode;
import com.example.form.exception.ApplicationException;
import com.example.form.model.Board;
import com.example.form.service.IBoradService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Api(tags = "板块接口")
@RequestMapping("/borad")
@RestController
@Slf4j//打印日志
public class BoradController {
    // 从配置⽂件中获取主⻚中显⽰的版块个数，默认为9
    @Value("${yl-forum.index.board-num:9}")
    private Integer indexBoardNum;

    @Resource
    private IBoradService boradService;//注入数据库操作的实现类

    @ApiOperation("获取首页板块列表")
    @GetMapping("/topList")//二级路径
    public AppResult<List<Board>> topList(){
        log.info("首页板块个数为:"+indexBoardNum);//打印日志,我们获取的首页板块的数量
        //调用service查询结果
        List<Board> boards=boradService.selectByNum(indexBoardNum);//查询默认的获取的默认的数量
        //判断是否为空
        if (boards==null){
            boards=new ArrayList<>();//为空,则new一下,让其不为空,因为等下要传递到前端的
        }
        //返回结果
        return AppResult.success(boards);
    }
    @ApiOperation("获取板块信息")
    @GetMapping("/getById")
    public AppResult getById(@ApiParam("板块id") @RequestParam("id") @NonNull Long id){
        //因为已经在参数的那一刻进行校验了,所以直接调用service层方法即可
        Board board=boradService.selectById(id);
        //校验得到的板块的信息正确性
        if(board==null||board.getDeleteState()==1){
            //板块不存在或者板块已经被删除
            //打印日志
            log.warn(ResultCode.FAILED_NOT_EXISTS.toString());//打印资源不存在
            //抛出异常
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_NOT_EXISTS));
        }
        //返回结果
        return AppResult.success(board);//把查询到的板块信息传递回去
    }
}
